#ifdef UTIL_PLATFORM_LINUX
#include "io/RandomAccessFile.h"
#include "unistd.h"
#include "fcntl.h"  // 引入O_RDWR等宏定义
#include <stdexcept>
#include <cstring>  // 用于strerror
namespace yzrilyzr_io{
	void RandomAccessFile::setLength(u_index newLength){
		checkOpen(); // 确保文件已打开

		// 关闭当前文件流
		fst.close();

		// 打开文件，使用正确的打开模式标志
		int fd = ::open(filePath.c_str(), O_RDWR | O_CREAT, 0644);
		if(fd == -1){
			// 包含具体错误信息
			throw std::runtime_error("Failed to open file to set length: " +
			                         std::string(strerror(errno)));
		}

		// 截断文件到指定长度
		if(ftruncate(fd, static_cast<off_t>(newLength)) == -1){
			int error = errno; // 保存错误码，避免close覆盖
			::close(fd);
			throw std::runtime_error("Failed to set file size: " +
			                         std::string(strerror(error)));
		}

		// 关闭文件描述符
		if(::close(fd) == -1){
			throw std::runtime_error("Failed to close file after setting length: " +
			                         std::string(strerror(errno)));
		}

		// 重新打开文件
		open(filePath, "rw");
	}
}
#endif